package com.it.schoolbookshop_back.service;

import com.it.schoolbookshop_back.entities.dto.OrderGenerateDTO;
import com.it.schoolbookshop_back.entities.po.Transaction;
import com.it.schoolbookshop_back.entities.vo.OrderDetailVO;
import com.it.schoolbookshop_back.entities.vo.OrderGenerateVO;

import java.util.List;
import java.util.Map;

/**
 * 订单服务接口
 */
public interface OrderService {
    
    /**
     * 生成订单
     * @param orderGenerateDTO 订单生成请求数据
     * @param buyerId 买家ID
     * @return 订单生成结果
     */
    OrderGenerateVO generateOrder(OrderGenerateDTO orderGenerateDTO, Integer buyerId);
    
    /**
     * 取消订单
     * @param orderId 订单号
     * @return 是否取消成功
     */
    boolean cancelOrder(String orderId);
    
    /**
     * 查询所有订单
     * @param status 订单状态（可选）
     * @return 订单列表，只包含id, order_id, status, created_at, updated_at字段
     */
    List<Map<String, Object>> getAllOrders(String status);
    
    /**
     * 查询指定用户的订单
     * @param userId 用户ID
     * @param status 订单状态（可选）
     * @return 订单列表，只包含id, order_id, status, created_at, updated_at字段
     */
    List<Map<String, Object>> getUserOrders(Integer userId, String status);
    
    /**
     * 获取订单详情
     * @param orderId 订单号
     * @return 订单详情，包含书籍和卖家信息
     */
    OrderDetailVO getOrderDetail(String orderId);
    
    /**
     * 检查订单是否属于指定用户
     * @param orderId 订单号
     * @param userId 用户ID
     * @return 如果订单属于该用户则返回true，否则返回false
     */
    boolean isOrderBelongsToUser(String orderId, Integer userId);
    
    /**
     * 支付订单
     * @param orderId 订单号
     * @param buyerId 买家ID
     * @return 是否支付成功
     */
    boolean payOrder(String orderId, Integer buyerId);
    
    /**
     * 根据订单号和书籍标题获取卖家ID
     * @param orderId 订单号
     * @param bookTitle 书籍标题
     * @return 卖家ID，如果没有找到则返回null
     */
    Integer getSellerIdByOrderIdAndBookTitle(String orderId, String bookTitle);
}
